#include <AT89X52.H>
#include "uart.h"
#include "typedef.h"

static USART Usart;
static code u8 HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

void USART_Configure(void) 
{
    u8 TH1_Dat;

    TH1_Dat=0xFA;
    TMOD &= 0x0F;//先清除再配置
    TMOD |= 0x20;
    SCON &= 0x0F;
    SCON |= 0x50;
    TH1 = TH1_Dat;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

void USART_SendByte(u8 dat) //单字符发送
{
    SBUF=dat;
    while(!TI);  //等待发送数据完成
    TI=0;                //清除发送完成标志位
}

#if 0
void USART_Send(u8* arr,u16 len)//多字符发送
{
  u16 i;
    for(i=0;i<len;i++)
    {
        SBUF=arr[i];
      while(!TI);  //等待发送数据完成
      TI=0;                //清除发送完成标志位
    }
}
#endif

void USART_SendStr(u8* str)//字符串发送
{
  while(1)
    {
      if(*str=='\0') break;
        SBUF=*str++;
        while(!TI);  //等待发送数据完成
      TI=0;                //清除发送完成标志位
    }
}

void pr_hex(u8 x)
{
	USART_SendByte('0');
	USART_SendByte('x');
	USART_SendByte(HexTable[x>>4]);
	USART_SendByte(HexTable[x&0x0F]);
}

static void USART_IRQHandler(void) interrupt 4  //串口中断函数
{
  if(RI==1) 
    {
        RI = 0;    
        Usart.RX_BUFF[Usart.RX_COUNT++]=SBUF;
        if(Usart.RX_COUNT==USART_RX_LEN) Usart.RX_COUNT=0;
    }
}
